package com.sl.sdn.repository.impl;
import com.sl.sdn.dto.OrganDTO;
import com.sl.sdn.repository.OrganRepository;
import org.springframework.data.neo4j.core.Neo4jClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Component
public class OrganRepositoryImpl implements OrganRepository {
    @Resource
    private Neo4jClient neo4jClient;
    /**
     * 根据业务id查询机构信息
     * @param bid 业务id
     * @return
     */
    @Override
    public OrganDTO findByBid(Long bid) {
        // 定义cql: MATCH (n) WHERE n.bid = 替换好变量 RETURN n
        // 执行查询得到结果: CollUtil.getFirst(executeQuery(cql))
        return null;
    }
    /**
     * 根据输入内容 模糊查询机构名称包含该字符的机构列表
     * @param name 机构名称
     * @return
     */
    @Override
    public List<OrganDTO> findAll(String name) {
        // 定义cql:
        // 如果查询name为空则 查询全部    cql: MATCH (n) RETURN n
        // 如果不为空 查询节点名字包含的信息  cql:  MATCH (n) WHERE n.name CONTAINS '变成name变量信息' RETURN n
        // 执行并解析结果: executeQuery(cql)
        return null;
    }
    /**
     * 抽取通用的结果解析方法
     * @param cypherQuery  解析方法中未绑定参数，需要传入前自行拼接好
     * @return
     */
    private List<OrganDTO> executeQuery(String cypherQuery) {
        //执行查询->设置返回类型->处理结果映射->.all()返回集合
        //处理结果映射:
        //  1. record中获取 n 节点信息获取map参数      提示: cql中return  n
        //  2. 将map转为OrganDTO     tips: BeanUtil
        //  3. 设置经纬度          tips: map中获取location 强转为InternalPoint2D类型
        //  4. 设置节点类型         tips: 取Node中第一个标签  通过OrganTypeEnum获取code值
        //  5. 返回organDto机构对象
        // 返回集合
        return null;
    }
}